document.body.onload = init;
/**
 *    本规格扩展自 High Resolution Time 规格，通过提供方来存储和检索高精度性能测量数据
 * 通常来说，测量 web 应用性能是构建高性能应用的重要部分。本规格定义了必要的性能时序基础，允许开发者
 * 访问和检索web应用全生命周期中的各种性能测量。
 *    navigationTiming、ResourceTiming、UserTiming 分别定义了关于页面文档导航、页面文件加载和开发者脚本相关的时序信息。
 * 它们和其他一个性能接口一起描述 web 应用的 PerformanceTimeline。 
 */

/**
 * 下面的示例，展示了如何访问性能时序对象并获取性能数据
 */
function init () {
  performance.mark('startWork');
  for(var i = 0; i < 1000000; i += 1) { }
  performance.mark('endWork');
  measurePerf();
}

function measurePerf() {
  performance.getEntries()
    .map(entry => JSON.stringify(entry, null, 2))
    .forEach(json => console.log(json))
}

/**
 *    另外，开发者还可以通过 PerformanceObserver 接口监听新的性能数据通知。
 * PerformanceObserver 接口在 Performance Timeline Level 2 规格中被添加，其被设计用于解决上面
 * 的例子中基于缓冲区的局限性。通过使用 PerformanceObserver 接口应用可以：
 *    ·避免通过轮询获取新的数据
 *    ·避免昂贵的重复数据消除逻辑
 *    ·消除属性条件，和其他想要操作缓冲区的消费者
 * 规格建议积极使用 PerformanceObserver，从长远来看，以后新增的API很可能必须通过观察者使用
 */

/**
 * 性能时序接口扩展了原本的性能接口，增加了一下字段 {
 *    getEntries: {Array[PerformanceEntry] Function ()} 返回通过 Filter buffer by name and type 算法筛选后的name 和 type 为 null 的性能实体
 *    getEntriesByType: {Array[PerformanceEntry] Function ()} 返回通过 Filter buffer by name and type 算法筛选后的 name 为 null，type 为对应类型的性能实体
 *    getEntriesByName: {Array[PerformanceEntry] Function ()} 返回通过 Filter buffer by name and type 算法筛选后的 name 为 对应名字，type 为null的性能实体
 * }
 */